package day230509;

import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/5/9 20:24
 * 蘑菇阵
 */
public class Main02 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt(); // 行数
            int m = scan.nextInt(); // 列数
            int k = scan.nextInt(); // 蘑菇个数
            int[][] map = new int[n+1][m+1]; // 初始化地图
            while (k-- != 0) {
                // 初始化蘑菇
                int x = scan.nextInt();
                int y = scan.nextInt();
                map[x][y] = 1; // 表示蘑菇
            }
            // 使用动态规划来计算(1,1)->(n,m)的路径中没蘑菇的概率
            double[][] dp = new double[n+1][m+1];  
            dp[1][1] = 1.0; // (1,1) -> (1,1) 没蘑菇的概率为1
            // 对于每个格子都有可能朝右走或者朝下走, 概率为0.5
            // 对于边界只能朝右或者朝下, 概率为1
            // 对于蘑菇所在位置, 没蘑菇的概率为0
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= m; j++) {
                    if (!(i == 1 && j == 1)) {
                        // 不是起始位置才需要迭代
                        dp[i][j] = dp[i][j-1] * (i == n ? 1 : 0.5) + dp[i-1][j] * (j == m ? 1 : 0.5);
                    }
                    if (map[i][j] == 1) {
                        // 如果当前位置是蘑菇
                        dp[i][j] = 0;
                    }
                }
            }
            // 控制结果输出
            System.out.println(String.format("%.2f", dp[n][m]));
        }
        scan.close();
    }
}
